package Offer26;

/**
 * 删除有序数组中的重复项
 * 给你一个有序数组 nums ，请你 原地 删除重复出现的元素，使每个元素 只出现一次 ，返回删除后数组的新长度。
 * <p>
 * 不要使用额外的数组空间，你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
 *
 * @author 23737
 * @time 2021.10.25
 */
public class Test_Two {
    public static void main(String[] args) {
        System.out.println(new Solution_Two().removeDuplicates(new int[]{0, 1, 1, 2}));
    }
}

/**
 * 挺好的思想,算是暴力解法
 */
class Solution_Two {
    public int removeDuplicates(int[] nums) {
        int len = nums.length;
        if (len == 0) {
            return 0;
        }
        int a = 1;
        for (int i = 0; i < len - 1; i++) {
            if (nums[i] != nums[i + 1]) {
                nums[a] = nums[i + 1];
                a++;
            }
        }
        return a;
    }

    /**
     * 双指针
     *
     * @param nums
     * @return
     */
    public int removeDuplicates2(int[] nums) {
        int n = nums.length;
        if (n == 0) {
            return 0;
        }
        int fast = 1, slow = 1;
        while (fast < n) {
            if (nums[fast] != nums[fast - 1]) {
                nums[slow] = nums[fast];
                ++slow;
            }
            ++fast;
        }
        return slow;
    }
}
